package org.util;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * @author huangshen
 * @version 0
 * @description FileUtils
 * @since 2022/1/30 20:48
 */
public class FileUtils {

    /**
     * 获取导出地址
     *
     * @param currPath
     * @param exportFileName
     * @return
     */
    public static String getExportAddress(String currPath, String exportFileName) {
        if (currPath == null) {
            System.out.println("配置异常,相关文件存储信息不存在");
        }
        return currPath + exportFileName;
    }

    /**
     * 检查文件是否存在
     *
     * @param file
     */
    public static void fileExits(File file) {
        try {
            // 如果文件不存在
            if (!file.exists()) {
                boolean mkflag = file.createNewFile();
                if (!mkflag) {
                    System.out.println("aaaa");
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    /**
     * 文件夹是否存在
     *
     * @param file
     */
    public static void folderExists(File file) {
        // 如果文件夹不存在
        if (!file.exists()) {
            boolean mkdirs = file.mkdirs();
            if (!mkdirs) {
                System.out.println("aaaa");
            }
        }

    }

    // 删除文件
    public static boolean delAllFile(String path) {
        boolean flag = false;
        File file = new File(path);
        if (!file.exists()) {
            return flag;
        }
        if (!file.isDirectory()) {
            return flag;
        }
        String[] tempList = file.list();
        File temp = null;
        for (String s : tempList) {
            if (path.endsWith(File.separator)) {
                temp = new File(path + s);
            } else {
                temp = new File(path + File.separator + s);
            }
            if (temp.isFile()) {
                temp.delete();
            }
            if (temp.isDirectory()) {
                // 先删除文件夹里面的文件
                delAllFile(path + "/" + s);
                // 再删除空文件夹
                delFolder(path + "/" + s);
                flag = true;
            }
        }
        return flag;
    }

    //删除文件夹
    public static void delFolder(String folderPath) {
        try {
            // 删除完里面所有内容
            delAllFile(folderPath);
            java.io.File myFilePath = new java.io.File(folderPath);
            myFilePath.delete(); //删除空文件夹
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除文件夹
     *
     * @param file
     */
    public static void deleteDirector(File file) {
        // 判断是否存在
        if (file.exists()) {
            // 判断是不是标准文件，如果是标准文件就直接删除文件
            if (file.isFile()) {
                file.delete();
            } else {// 如果不是标准文件，则进行递归操作
                // 将文件转为文件类型的文件数组
                File[] listFiles = file.listFiles();
                // 遍历文件数组, 注意是：文件类型
                assert listFiles != null;
                for (File f : listFiles) {
                    // 递归
                    deleteDirector(f);
                }
            }
            try {
                Files.delete(Paths.get(file.getPath()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println(file.getPath() + "文件不存在或已经删除了");
        }
    }

}
